package com.qinghong.gulimall.product;

import org.mybatis.spring.annotation.MapperScan;
import org.redisson.spring.session.config.EnableRedissonHttpSession;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

/**
 * 整合mp
 * 配置： 1.数据源 2.配置mp mapperscan  mapper-location
 *
 * mp的逻辑删除
 *
 * jsr303
 * 1、加上校验注解
 *
 * 统一异常处理
 *
 * 分组校验
 * 默认没有指定分组的校验主句 在分组校验情况下不生效
 *
 * 自定义校验:自己编写校验注解 和校验器  关联
 *
 * 8.整合springcache
 * 2)写配置 CacheAutoConfiguration会导入RedisCacheConfiguration
 *  自动装好了缓存管理器RedisCacheManager
 *   配置使用redis作为缓存
 *  @Cacheable: Triggers cache population. 触发将数据保存到缓存的操作
 *
 * @CacheEvict: Triggers cache eviction.触发将数据删除的操作
 *
 * @CachePut: Updates the cache without interfering with the method execution. 不影响方法执行缓存
 *
 * @Caching: Regroups multiple cache operations to be applied on a method. 组合多个缓存操作
 *
 * @CacheConfig: Shares some common cache-related settings at class-level. 在类级别共享缓存配置
 *
 * 1.开启
 * 2.使用注解
 *
 *4.原理:
 *  CacheAutoConfiguration ->redisConfiguration -> 自动配置了RedisManager -> 初始化所有的缓存
 *  -> 决定使用什么配置 redisCacheConfiguration有就用自己的 没有就默认配置
 *  ->想改当前配置 只需要给容器中放一个rediscacheconfiguration即可
 *  -> 就会用到当前
 */
@EnableAspectJAutoProxy(exposeProxy = true)
@EnableRedissonHttpSession
@EnableCaching
@EnableFeignClients(basePackages = "com.qinghong.gulimall.product.feign")
@EnableDiscoveryClient
@MapperScan("com.qinghong.gulimall.product.dao")
@SpringBootApplication
public class GulimallProductApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallProductApplication.class, args);
    }

}
